// 自己的代码
/*
#include <iostream>
using namespace std;
int main()
{
  // 请在此输入您的代码
  int a,b;
  cin>>a;
  cin>>b;
  int x;
  x=a*a-b*b;
  cout<<x<<endl;

  return 0;
}
*/

// 别人的代码
//
//  Created by 13773 on 2024/2/28.
//

#include <iostream>
#include <string>

using namespace std;
int temp1[201] = {0};
int temp2[201] = {0};
int temp3[201] = {0};

/*
// 字符串反转,在本工程中没有用到此函数
string reverse(string s){
    size_t k = s.size()-1;
    for(int i = 0;i<=k/2;i++){
        char temp = s[i];
        s[i] = s[k-i];
        s[k-i] = temp;
    }
    return s;
}
*/

// 这个计算的算法，未明白，待研究。
void pow_str(int len, int *a, int *b)
{
    char str[100] = {0};
    for (int i = 0; i < len; i++)
    {
        for (int j = 0; j < len; j++)
        {
            temp3[i + j] += a[i] * a[j]; // 计算a[i] * a[j]的各位数字，存入temp3数组中

            // 下面是打印计算的过程，可以注释掉
            sprintf(str, "temp3[%d](%d) += a[%d](%d) * a[%d](%d).", (i + j), temp3[i + j], i, a[i], j, a[j]);
            cout << str << endl;
        }
    }

    for (int i = 0; i < 2 * len; i++)
    {
        temp3[i + 1] += temp3[i] / 10;
        temp3[i] %= 10;
    }

    for (int i = 0; i < 201; i++)
    {
        b[i] = temp3[i];
        temp3[i] = 0;
    }
}

int main()
{
    string a, b;
    cin >> a >> b;

    if (a[0] == '-')
        a = a.substr(1); // 去除输入的字符串前面的 ‘-’符号，如果用户输入的是 -123，则去除负号，此时a为123

    if (b[0] == '-')
        b = b.substr(1); // 去除输入的字符串前面的 ‘-’符号.因为是计算平方，所以，前面的负号无所谓

    for (int i = a.size() - 1; i >= 0; i--)
    {
        temp1[a.size() - 1 - i] = a[i] - '0'; // 字符串转换为数字，从最高位开始，存入temp1数组中,注意字符串的下标从0开始,数组的下标从0开始,所以要减1,
                                              // 同时注意‘字符’转‘数字’的差值为35,所以要减去'0',如'0'转数字为0, '1'转数字为1,以此类推.
                                              // 如字符'1'转数字为1, 字符'2'转数字为2, 字符'3'转数字为3, 字符'4'转数字为4...., 字符'9'转数字为9.
                                              // 所以'0'转数字为35, '1'转数字为36, '2'转数字为37, '3'转数字为38, '4'转数字为39, '5'转数字为40, '6'转数字为41, '7'转数字为42, '8'转数字为43, '9'转数字为44.
                                              // 所以'123'转数字为123.
    }

    for (int i = b.size() - 1; i >= 0; i--) // 同理，字符串b也转换为数字存入temp2数组中
    {
        temp2[b.size() - 1 - i] = b[i] - '0';
    }

    pow_str(a.size(), temp1, temp1); // 计算temp1 * temp1 的各位数字，存入temp3数组中
    pow_str(b.size(), temp2, temp2); // 计算temp2 * temp2 的各位数字，存入temp3数组中

    bool flag = false;
    for (int k = 200; k >= 0; k--)
    {
        if (temp1[k] != temp2[k])
        {
            flag = temp1[k] > temp2[k]; // 从最高位开始比较，一旦 temp1[k] > temp2[k],则flag为真,否则为假，并立即返回不再比较后面的数字.
            break;
        }
    }

    // flag为真，代表a>b
    if (flag)
    {
        for (int i = 0; i < 201; i++) // 从最低位开始，
        {
            temp1[i] -= temp2[i]; // 因为上面的比较已经判定temp1 > temp2,所以这里只需要计算temp1 - temp2的各位数字即可.
            if (temp1[i] < 0)     // 注意这里的处理，如果temp1[i] < 0,则说明temp1[i] 的数字比temp2[i]的数字小，需要从temp1[i+1]借10到temp1[i]的最高位,而temp1[i+1]因为借10给temp1[i]了，所以要减去1.
            {
                temp1[i] += 10;
                temp1[i + 1]--;
            }
        }

        int k = 200;
        while (temp1[k] == 0) // 去除temp1数组后面的0（NULL）
            k--;

        for (int i = k; i >= 0; i--) // 输出temp1数组中的数字，从最高位开始
        {
            cout << temp1[i];
        }
    }
    else
    {
        for (int i = 0; i < 201; i++)
        {
            temp2[i] -= temp1[i]; // 同理，计算temp2 - temp1的各位数字即可.
            if (temp2[i] < 0)
            {
                temp2[i] += 10;
                temp2[i + 1]--;
            }
        }
        int k = 200;
        while (temp2[k] == 0)
            k--;
        cout << '-';
        for (int i = k; i >= 0; i--)
        {
            cout << temp2[i];
        }
    }
}
